
const computedBehavior = require('miniprogram-computed')
import Dialog from '../../miniprogram_npm/@vant/weapp/dialog/dialog';
// 购物车API
import { getGoodsList, // 请求：购物车商品API
				 alterGoodsStatus, // 请求：修改购物车中商品状态API
				 alterAllGoodsStatus, //请求：修改购物车中所有商品状态API
				 removeCartGoods,   // 请求：删除购物车中商品API
			 } from '../../api/cartApi'

Component({
  behaviors:[computedBehavior],
  data:{
		goodsList: [], // 商品列表
		unGoodsList:[] // 不能购买商品列表
  },

  computed:{
    // 全选按钮的状态
    allGoodsStatus(data){
      let count  = 0;
      data.goodsList.forEach(item=> item.status?count++:'')
      return data.goodsList.length === count
    },
    // 当前所有已选中商品价格总和
    goodsPriceTotal(data){
      let total = 0;
      data.goodsList.forEach(item=>{
        let amount = item.goods.selectAmount
        let price = item.goods.commodity_price
        item.status ? total += price * amount : ''
      })
      return total*100
		},
		// 提交订单按钮是否禁用
		submitBtnDisabled(data){
			let goodsList = data.goodsList.filter(item=>item.status)
			return goodsList.length === 0
		}
  },


	lifetimes:{
		// 组件初始化完成后，触发该声明周期函数
		attached:function(){
			console.log("执行了shoppingCart组件的attached函数");
		}
	},
	// 组件所在页面生命周期回调函数
	pageLifetimes:{
		show:function(){
			console.log("执行了shoppingCart组件所在的show函数");
			// 初始化购物车中商品
			this.initialShoppingCart()
		}
	},


  methods:{

		/**
		 * 处理点击购物车头部标题，会跳转至管理收货地址页面
		 */
		handleClickTitle(){
			if(getApp().token){
				// 跳转到收货地址管理页面
				wx.navigateTo({
					 url: '/pages/my/addressManger/addressManger?from=cart',
				 })
			}else{
				wx.navigateTo({
					url: '/pages/my/login/login',
				})
			}
		},

    // -------  改变商品状态  --------
    changeGoodsStatus(e){
			// 获取要改变商品在数组中的索引
			let index = e.currentTarget.dataset.index
			// 获取需要修改商品状态的id
			let goodsId  =  this.data.goodsList[index].goods.commodity_id
			let specificationid = this.data.goodsList[index].goods.commodity_specification[0].id
			alterGoodsStatus(goodsId,e.detail,specificationid).then(data=>{
				let key = 'goodsList['+index+'].status'
				this.setData({[key]:e.detail})
				// 初始化购物车tabbar徽标
				getApp().initialCartTabBarBadge()
				console.log("改变商品状态：",e);
			})
		},
	

    // -------- 切换所有商品状态 --------
    cutAllGoodsStatus(){
			let status = !this.data.allGoodsStatus
			// 发送请求：修改所有商品在购物车中的状态
			alterAllGoodsStatus(status).then(data=>{
				this.data.goodsList.forEach((item,index)=>{
					let key = 'goodsList['+index+'].status'
					this.setData({[key]:status})
			    // 初始化购物车tabbar徽标
					getApp().initialCartTabBarBadge()
				})
			})
      console.log("点击了全选按钮：",this.data.allGoodsStatus);
    },

		
		/**
		 * 监听通过步进器删除购物车中商品的数量
		 * @param {Object}} e 事件对象 
		 */
    watchGoodsAmountZero(e){
			// 获取商品在数组中的索引、商品的id、最新的数量
			let {index, amount, goods_id,specificationid} = {...e.detail}
			if(amount === 0){
				Dialog.confirm({ 
						context:this, 
						title: '提示',
						message: '您要确定删除该商品吗？',
				}).then(()=>{
					console.log("--------------------------------------------------------");
							removeCartGoods([{goods_id,specificationid}]).then(data=>{
							//  从购物车的商品列表中删除该商品
							this.data.goodsList.splice(index,1)
							this.setData({ goodsList: this.data.goodsList })
							// 初始化购物车tabbar徽标
							getApp().initialCartTabBarBadge()
							})
					}).catch(err=>'')
			}else{
				let key = 'goodsList['+index+'].goods.selectAmount'
				this.setData({ [key]:amount })
			}
    },

    // -------- 处理点击提交订单按钮，跳转至确认订单页面 ------
    handleSubmitOrder(){
			// 获取购物车中状态为选中的商品
			let selectGoods = this.data.goodsList.filter(item=> item.status)
			let orderGoods = [] // 存放将要传递到订单中商品
			selectGoods.forEach(item=>{
				// 将商品放入订单
				orderGoods.push({
					id:item.goods.commodity_id, // 商品ID
					name:item.goods.commodity_name, // 名称
					currentprice:item.goods.commodity_price, // 商品现价
					lastprice:item.goods.commodity_original, // 商品原价
					pic:item.goods.commodity_sideshow[0], // 商品图片
					count:item.goods.selectAmount, // 商品数量
					specid:item.goods.commodity_specification[0].id, // 规格名称
					specname:item.goods.commodity_specification[0].specificationame // 商品规格
				})
			})
			// 跳转到提交订单页面
      wx.navigateTo({
				url: '/pages/submit-order/submit-order',
				success:function(res){
					// 通过eventChannel来向打开页面传递数据
					res.eventChannel.emit('acceptDataFromCartPage',{goodsList:orderGoods})
				}
      })
      console.log("点击了跳转提交订单页面按钮");
		},
		
		// --------- 处理点击侧滑删除按钮事件 ---------
		handleClickSwipeCell(e){
			if(e.detail === 'right'){
				let index = e.currentTarget.dataset.index
				console.log("点击了侧滑删除按钮"+index);
				// 获取要删除商品的id
				let goods_id = this.data.goodsList[index].goods.commodity_id
				let specificationid = this.data.goodsList[index].goods.commodity_specification[0].id
				let goodsList = [{goods_id,specificationid}]
				removeCartGoods(goodsList).then(data=>{
					this.data.goodsList.splice(index,1)
					this.setData({ goodsList: this.data.goodsList })
					// 初始化购物车tabbar徽标
					getApp().initialCartTabBarBadge()
				})
			}
		},
		// -----  初始化购物车  ------
		initialShoppingCart(){
			// 没有token就不去请求购物车中数据
			if(getApp().token){
				wx.showLoading({
					title: '拼命加载中...',
					mask:true
				})
				// 请求购物车中商品
				getGoodsList().then(data=>{
					this.setData({
						goodsList:data.shoppingAll,
						unGoodsList:data.unShopping
					})
					wx.hideLoading()
				}).catch(err=>{
					wx.hideLoading()
					wx.showToast({
						title: '服务端开小差了，请稍后再试！',
						icon:'error'
					})
				})
			}
		},

		/**
		 * 处理删除购物车中已选商品
		 */
		handleRemoveSelectGoods(){
			let goodsIds = []  // 存放已选中商品的id
			// 获取已选中商品的id
			this.data.goodsList.forEach((item)=>{
				if(item.status)
					goodsIds.push({
						goods_id:item.goods.commodity_id,
						specificationid:item.goods.commodity_specification[0].id
					})
			})
			// 判断数组中是否存在已选商品
			if(goodsIds.length<1){
				wx.showToast({
					title: '没有要删除的商品',
					icon:'none',
					duration:1500
				})
				return
			}
			Dialog.confirm({
				context:this,
				title:"提示",
				message:'您是否要删除已选中商品' 
			}).then(()=>{
				// 删除购物车中已选中商品id
				removeCartGoods(goodsIds).then(data=>{
					// 删除成功后初始化购物车
					this.initialShoppingCart()
					// 初始化购物车tabbar徽标
					getApp().initialCartTabBarBadge()
				})
			}).catch(err=>'')
		},

		/**
		 * 处理删除指定的失效商品
		 * @param {Object} e 
		 */
		handleDelUnGoods(e){
			if(e.detail === 'right'){
				let index = e.currentTarget.dataset.index
				console.log("点击了侧滑删除按钮"+index);
				// 获取要删除商品的id
				let goods_id = this.data.unGoodsList[index].unable.commodity_id
				let specificationid = this.data.unGoodsList[index].unable.commodity_specification[0].id
				let goodsList = [{goods_id,specificationid}]
				removeCartGoods(goodsList).then(data=>{
					this.data.goodsList.splice(index,1)
					this.setData({ unGoodsList: this.data.goodsList })
				})
			}
		},
		/**
		 * 处理点击删除所有失效商品
		 */
		handelDelAllUnGoods(){
			Dialog.confirm({
				context:this,
				title:"提示",
				message:'是否要删除所有失效商品' 
			}).then(()=>{

				let goodsIds = []  // 存放已选中商品的id
				// 获取已选中商品的id
				this.data.unGoodsList.forEach((item)=>{
						goodsIds.push({
							goods_id:item.unable.commodity_id,
							specificationid:item.unable.commodity_specification[0].id
				})
			})
				// 删除购物车中已选中商品id
				removeCartGoods(goodsIds).then(data=>{
					// 删除成功后初始化购物车
					this.initialShoppingCart()
					// 初始化购物车tabbar徽标
					getApp().initialCartTabBarBadge()
				})
			}).catch(err=>'')
		}
  }
})